Copyright ã1995 by NeXT Computer, Inc.  All Rights Reserved.

NXInvalidationNotifier

Inherits From:	Object

Conforms To:	NXReference

Declared In:	machkit/NXInvalidationNotifier.h

Class Description

The NXInvalidationNotifier class is an abstract class that defines reference-counted objects that notify other objects when they become invalid.  An NXInvalidationNotifier becomes invalid when no more references to it are held (all references have been given up by sending the object a free message).  An NXInvalidationNotifier could also become invalid for other reasons; for example, an NXConnection object (which is a subclass of NXInvalidationNotifier) becomes invalid when its connection is broken.  An invalid object usually exists for a short time after becoming invalid so it can clean up, but it shouldn't be treated as though it were fully usable.

Examples of NXInvalidationNotifier subclasses include NXConnection and NXPort.

Instance Variables

unsigned int refcount;

BOOL isValid;

NXLock *listGate;

List *funeralList;

refcount 	The object's reference count

isValid 	YES if the object is valid

listGate 	A lock to protect data structures

funeralList 	A list of objects to be notified upon invalidation

Adopted Protocols

NXReference	- addReference
- free
- references

Method Types

Initializing a new object	- init

Really freeing an object	- deallocate

Getting and setting validity	- invalidate
- isValid

Registering for notification	- registerForInvalidationNotification:
- unregisterForInvalidationNotification:

Instance Methods

deallocate

- deallocate

Deallocates the object's storage, freeing the object regardless of its reference count.  A subclass of NXInvalidationNotifier should generally invoke this method from within its implementation of free when no more references are held to ensure normal freeing behavior.

See also:  - free

free

- free

Decrements the reference count of the object, marking the object invalid, sending invalidation notifications, and returning nil if no more references to the object are held.  If references are still held, this method returns self.  Unlike the free method for most classes, this method never deallocates the object's storage.  (In other words, it never actually frees the object.)  This means that the object still exists to receive messages after it becomes invalid due to freeing, which can be useful for objects that need to do some final housekeeping when no more references are held.  Generally a subclass of NXInvalidationNotifier should implement a version of free that deallocates itself when no more references are held, with the result that free will properly deallocate the object as expected at the appropriate time.  For example:

- free
{
    id ret = [super free];
    if (ret) return self;
    // No more references held, do the required cleanup
    return [super deallocate];
}

See also:  - deallocate, - invalidate

init

- init

Initializes the receiver, a newly allocated NXInvalidationNotifier instance.  Returns self.

invalidate

- invalidate

Marks the object as invalid, which means that though the object exists, it's not completely functional and might not exist for long.  Once an object becomes invalid, there is no way provided to make the object valid again, and it would be difficult to implement in a subclass in a thread-safe manner.  This method sends a senderIsInvalid: message to every object that registered for invalidation notification, frees the funeralList (but not the objects in it), and returns self.

See also:  - registerForInvalidationNotification:

isValid

- (BOOL)isValid

Returns YES if the object is valid.  Generally, invalid objects should be sent only messages that allow other objects to clean up and eliminate their use of the object.

registerForInvalidationNotification:

- registerForInvalidationNotification:(id <NXSenderIsInvalid>)anObject

Registers anObject so that it will receive a senderIsInvalid: message when the receiver becomes invalid.  An object might become invalid because it is about to be freed, because a Distributed Objects connection is broken, or for some other application-specific reason.  Returns self.

See also:  - invalidate, - unregisterForInvalidationNotification:

unregisterForInvalidationNotification:

- unregisterForInvalidationNotification:(id <NXSenderIsInvalid>)anObject

Removes anObject from the list of objects that are notified when the receiver becomes invalid; thus anObject won't be notified.  Returns self.

See also:  - registerForInvalidationNotification: